from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from . import models
from .serializer import *
from django.core.paginator import Paginator

# 分类
class Categoryiew(APIView):
    def get(self,request):
        # 获取所有有效的分类
        catequeryset=models.Category.objects.filter(status=1).all()

        obj=CategorySerializer(catequeryset,many=True)

        return Response({'code':1000,'msg':'','data':obj.data})




# 商品
class GoodsView(APIView):
    def get(self,request):
        # 获取页码数
        p=int(request.GET.get('p',1))
        # 获取所有的商品数据
        goodsqueryset=models.Goods.objects.all()
        # 分页
        page_obj=Paginator(goodsqueryset,per_page=3)
        # 当前页的数据
        page=[i for i in page_obj.page_range]

        # 当前页的数据
        page_data=page_obj.page(1)

        # 上一页和下一页
        previous=page_data.has_previous()
        next =page_data.has_next()

        # 序列化当前页的数据
        obj=GoodsSerializer(page_data,many=True)

        # 构造数据
        data={
            'data':obj.data,
            'page':page,
            'previous':previous,
            'next':next
        }
        return Response({'code':1000,'msg':'','data':data})



    def post(self,request):
        # 1.接收参数
        name=request.POST.get('name','').strip()
        price=request.POST.get('prcie',0)
        img = request.FILES.get('img')
        cate_id = request.POST.get('cate_id',0)

        # 2.验证数据的重复性
        goodobj=models.Goods.objects.filter(name=name).first()
        if goodobj:
            return Response({'code': 1003, 'msg': '数据已存在'})

        # 3.构造数据
        data={
            'name':name,
            'price':price,
            'img':img,
            'cate_id':cate_id
        }

        # 反序列化
        obj=GoodsUnserializer(data=data)

        if obj.is_valid():
            flag=obj.save()
            if flag:
                return Response({'code':1000,'msg':'添加成功'})
            return Response({'code': 1001, 'msg': '添加失败'})
        print(obj.errors)
        return Response({'code': 1002, 'msg': '参数有误'})
